package llmtools

import (
	"context"
	"fmt"
	"github.com/tmc/langchaingo/tools"
	"log"
	"mcpGoSource/mcpclients"
)

// 定义一个天气的Tool,实现tools.Tool接口,以便注册到llm中被大模型调用
var _ tools.Tool = (*WeatherTool)(nil)

type WeatherTool struct {
	client *mcpclients.MCPWeatherClient
}

func NewWeatherTool() (*WeatherTool, error) {
	client, err := mcpclients.NewMCPWeatherClient()
	if err != nil {
		return nil, err
	}
	return &WeatherTool{
		client: client,
	}, nil
}

func (w WeatherTool) Name() string {
	return "weather_mcp"
}

// Description 返回工具的用途和调用参数,给大模型语义化的提示
func (w WeatherTool) Description() string {
	return "用于查询指定城市的当前天气信息。输入参数为城市名称（如'北京'或'Shanghai'），返回该城市的实时天气数据（温度、天气状况等）。"
}

// Call 大模型运行时动态调用工具的具体实现
func (w WeatherTool) Call(ctx context.Context, input string) (string, error) {
	// 调用 weather-mcp 服务
	log.Printf("调用[weather_mcp]工具, 参数:" + input)

	// 调用 MCP 天气客户端获取天气信息
	weatherInfo, err := w.client.GetWeather(ctx, input)
	if err != nil {
		return "", fmt.Errorf("获取天气信息失败: %v", err)
	}
	return weatherInfo, nil
}
